

package com.hazelcast.query.impl.getters;

import javax.annotation.Nullable;
import java.util.function.Supplier;

public interface GetterCache {
    int EVICTABLE_CACHE_MAX_CLASSES_IN_CACHE = 1000;
    int EVICTABLE_CACHE_MAX_GETTERS_PER_CLASS_IN_CACHE = 100;
    float EVICTABLE_CACHE_EVICTION_PERCENTAGE = 0.2f;

    Supplier<GetterCache> EVICTABLE_GETTER_CACHE_SUPPLIER = () -> new EvictableGetterCache(EVICTABLE_CACHE_MAX_CLASSES_IN_CACHE, EVICTABLE_CACHE_MAX_GETTERS_PER_CLASS_IN_CACHE, EVICTABLE_CACHE_EVICTION_PERCENTAGE, false);
    Supplier<GetterCache> SIMPLE_GETTER_CACHE_SUPPLIER = SimpleGetterCache::new;

    @Nullable
    Getter getGetter(Class<?> clazz, String attributeName);

    Getter putGetter(Class<?> clazz, String attributeName, Getter getter);
}
